package ee.tkasekamp.vickywaranalyzer.controller.tab; import java.util.stream.Collectors; import ee.tkasekamp.vickywaranalyzer.controller.other.CountryLabel; import ee.tkasekamp.vickywaranalyzer.controller.MainController; import ee.tkasekamp.vickywaranalyzer.core.JoinedCountry; import ee.tkasekamp.vickywaranalyzer.core.War; import ee.tkasekamp.vickywaranalyzer.service.ModelService; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.Tab; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; public class WarListController extends AbstractController { @FXML private Label playerLabel; @FXML private Label startDateLabel; @FXML private Label currentDateLabel; @FXML private ListView<CountryLabel> selectCountryIssue; @FXML private Button showAllWarsIssue; @FXML private Button showActiveWarsIssue; @FXML private Button showPreviousWarsIssue; @FXML private Button showMyWarsIssue; @FXML private TableView<War> warTable; @FXML private TableColumn<War, String> colNameWar; @FXML private TableColumn<War, String> colAttackerWar; @FXML private TableColumn<War, String> colDefenderWar; @FXML private TableColumn<War, String> colCasusBelliWar; @FXML private TableColumn<War, String> colStartDateWar; @FXML private TableColumn<War, String> colEndDateWar; private Tab tab; private MainController main; private ModelService modelServ; private ObservableList<War> warTableContent; public void init(MainController mainController, ModelService model, Tab tab) { main = mainController; modelServ = model; this.tab = tab; warTableContent = FXCollections.observableArrayList(); selectCountryIssue.getSelectionModel().selectedItemProperty() .addListener((arg0, arg1, arg2) -> { warTableShowCountry(arg2.getTag()); }); /* Listening to selections in warTable */ final ObservableList<War> warTableSelection = warTable.getSelectionModel().getSelectedItems(); warTableSelection.addListener(tableSelectionChanged); warTable.setItems(warTableContent); setColumnValues(); } @FXML void showActiveWarsIssue(ActionEvent event) { warTableShowActive(); } @FXML void showAllWarsIssue(ActionEvent event) { warTablePopulateAll(); } @FXML void showMyWarsIssue(ActionEvent event) { warTableShowMyWars(); } @FXML void showPreviousWarsIssue(ActionEvent event) { warTableShowPrevious(); } @Override public void reset() { playerLabel.setText(""); startDateLabel.setText(""); currentDateLabel.setText(""); tab.setDisable(true); selectCountryIssue.getItems().clear(); } public void populate() { playerLabel.setText(modelServ.getPlayerOfficial()); startDateLabel.setText(modelServ.getStartDate()); currentDateLabel.setText(modelServ.getDate()); tab.setDisable(false); populateCountryList(); warTablePopulateAll(); } private void setColumnValues() { /* Connecting the War fields with warTable columns */ colNameWar.setCellValueFactory(new PropertyValueFactory<>("name")); colAttackerWar.setCellValueFactory(new PropertyValueFactory<>("originalAttacker")); colAttackerWar.setCellFactory(cell -> getCell()); colDefenderWar.setCellValueFactory(new PropertyValueFactory<>("originalDefender")); colDefenderWar.setCellFactory(cell-> getCell()); colCasusBelliWar.setCellValueFactory(new PropertyValueFactory<>("casus_belli")); colStartDateWar.setCellValueFactory(new PropertyValueFactory<>("startDate")); colEndDateWar.setCellValueFactory(new PropertyValueFactory<>("endDate")); } private void warTablePopulateAll() { warTableContent.clear(); warTableContent.addAll(modelServ.getWars()); } private void warTableShowActive() { warTableContent.clear(); warTableContent.addAll(modelServ.getWars().stream().filter(item -> item.isActive()) .collect(Collectors.toList())); } private void warTableShowPrevious() { warTableContent.clear(); warTableContent.addAll(modelServ.getWars().stream().filter(item -> !item.isActive()) .collect(Collectors.toList())); } private void warTableShowMyWars() { warTableContent.clear(); for (War item : modelServ.getWars()) { for (JoinedCountry country : item.getCountryList()) { if (country.getTag().equals(modelServ.getPlayer())) { warTableContent.add(item); } } } } private void warTableShowCountry(String tag) { warTableContent.clear(); for (War item : modelServ.getWars()) { for (JoinedCountry country : item.getCountryList()) { if (country.getTag().equals(tag)) { warTableContent.add(item); } } } } private void populateCountryList() { modelServ.getCountries() .forEach((tag, x) -> selectCountryIssue.getItems().add(new CountryLabel(x))); } private ListChangeListener<War> tableSelectionChanged = new ListChangeListener<War>() { @Override public void onChanged(Change<? extends War> c) { if (!warTable.getSelectionModel().getSelectedItems().isEmpty()) { main.populateWarTab( (War) warTable.getSelectionModel().getSelectedItems().toArray()[0]); } } }; private TableCell<War, String> getCell() { return new TableCell<War, String>() { @Override protected void updateItem(String item, boolean empty) { super.updateItem(item, empty); setText(modelServ.getOfficialName(item)); } }; } }